# 自助咖啡机：
"""
咖啡机展示两种可选咖啡：拿铁咖啡和美式咖啡。格式如“拿铁(20元): 浓缩咖啡，牛奶，糖”
能够选择任意一种咖啡，并投入足够的钱币（金额不够时需要重新投币）。
咖啡机制作咖啡，并且记录本次交易记录（格式如“2023-03-24 16:24:49 订单：美式咖啡️，支付20元，找零5元”）。
咖啡机询问用户是否继续购买咖啡。如果继续，则从展示咖啡开始新流程。
如果用户不继续购买，咖啡机打印所有交易记录。
"""
import time
from datetime import datetime

from coffee.package.Americano import Americano
from coffee.package.coffee import Coffee
from coffee.package.latte_coffee import LatteCoffee


class CoffeeMachine:
    def __init__(self):
        self.records = []
        self.products = [LatteCoffee(), Americano()]

    def display(self):
        """展示咖啡"""
        print('------ 展示咖啡 ------')
        for product in self.products:
            print(product)
    def select_coffee(self) -> Coffee:
        """
        选择咖啡
        :return:
        """
        print('------ 选择咖啡 ------')
        while True:
            choice = input('请输入数字选择咖啡 0：拿铁，1：美式 ')
            if choice in ('0', '1'):
                return self.products[int(choice)]
            else:
                continue

    def input_money(self, coffee) -> int:
        """
        投入钱币
        :return:
        """
        print('------ 投入钱币 ------')
        while True:
            try:
                coin = input(f'请投入{coffee.price}元 ')

                if int(coin) < coffee.price:
                    print('投币金额不够，已退回。请重新投币')
                    continue

                else:
                    return int(coin)
            except Exception as e:
                print('输入金额不合法，请重新输入')

    def make_coffee(self,coffee, money):
         """
         制作咖啡
         :return:
         """
         print('------ 制作咖啡 ------')
         # 制作
         print('制作中，请稍候.....')
         time.sleep(2)
         print(f'{coffee.name} ☕️咖啡制作完成！')

         # 记录
         tm = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
         record = f"{tm} 订单：{coffee.name}咖啡️，支付{money}元，找零{money - coffee.price}元"
         self.records.append(record)

    def print_records(self):
        """
        打印记录
        """
        print('------ 打印记录 ------')
        for rec in self.records:
            print(rec)


